-- stack: in.2 -- format: 8 (HyperCard 1) -- flags: 0x0 (none) -- protect password hash: 0 -- maximum user level: 5 (scripting) -- window: Rect(x1=0, y1=0, x2=0, y2=0) -- screen: Rect(x1=0, y1=0, x2=0, y2=0) -- card dimensions: w=0 h=0 -- scroll: x=0 y=0 -- background count: 4 -- first background id: 19480 -- card count: 8 -- first card id: 36467 -- list block id: 2952 -- print block id: 17075 -- font table block id: 0 -- style table block id: 0 -- free block count: 0 -- free size: 0 bytes -- total size: 41440 bytes -- stack block size: 8192 bytes -- created by hypercard version: 0x00000000 -- compacted by hypercard version: 0x00000000 -- modified by hypercard version: 0x00000000 -- opened by hypercard version: 0x00000000 -- patterns[0]: 0x0000000000000000 -- patterns[1]: 0x8000000008000000 -- patterns[2]: 0x8800220088002200 -- patterns[3]: 0x8888222288882222 -- patterns[4]: 0x88AA22AA88AA22AA -- patterns[5]: 0xCCAA33AACCAA33AA -- patterns[6]: 0xEEAABBAAEEAABBAA -- patterns[7]: 0xEEBBBBEEEEBBBBEE -- patterns[8]: 0xFFBBFFEEFFBBFFEE -- patterns[9]: 0xFFBBFFFFFFBBFFFF -- patterns[10]: 0x8010022001084004 -- patterns[11]: 0xFFFFFFFFFFFFFFFF -- patterns[12]: 0x8822882288228822 -- patterns[13]: 0x1122448811224488 -- patterns[14]: 0xC4800C6843023026 -- patterns[15]: 0xB130031BD8C00C8D -- patterns[16]: 0xAA00AA00AA00AA00 -- patterns[17]: 0x8822552288225522 -- patterns[18]: 0x8855225588552255 -- patterns[19]: 0x77DD77DD77DD77DD -- patterns[20]: 0x8000000000000000 -- patterns[21]: 0xAA55AA55AA55AA55 -- patterns[22]: 0x038448300C020101 -- patterns[23]: 0x8244394482010101 -- patterns[24]: 0x8814224188412214 -- patterns[25]: 0x8080413E080814E3 -- patterns[26]: 0x22048C7422179810 -- patterns[27]: 0xBE808808EB088880 -- patterns[28]: 0x25C8328964244C92 -- patterns[29]: 0xA29C41BE2AC914EB -- patterns[30]: 0x40A00000040A0000 -- patterns[31]: 0x8040200002040800 -- patterns[32]: 0xAA00800088008000 -- patterns[33]: 0xFF80808080808080 -- patterns[34]: 0x081C22C180010204 -- patterns[35]: 0xFF808080FF080808 -- patterns[36]: 0xF87422478F172271 -- patterns[37]: 0xBF00BFBFB0B0B0B0 -- patterns[38]: 0xFF7FBE5DA2418000 -- patterns[39]: 0xFAF5FAF5A050A050 -- checksum: 0x0 ----- HyperTalk script ----- on openStack Global operationMode,dateforUpdate global UpdateField,span1,span2,span3 global upArrow,downArrow global maxDataPoints,minBaseValue global firstChart,saveLevel hide message box hide menubar put the userLevel into saveLevel set userLevel to 3 put 16692 into upArrow put 3584 into downArrow put 5 into span1 put 15 into span2 put 40 into span3 put 52 into maxDataPoints put 10000 into minBaseValue put 7 into firstChart -- number of first chart card end openStack on closeStack global saveLevel set userLevel to saveLevel end closeStack on clearScreen choose select tool doMenu select all doMenu clear picture end clearScreen function maxLine what,itemNr put item itemNr of line 1 of what into result repeat with i = 2 to the number of lines in what put max(result,item itemNr of line i of what) into result end repeat return result end maxLine function minLine what,itemNr put item itemNr of line 1 of what into result repeat with i = 2 to the number of lines in what put min(result,item itemNr of line i of what) into result end repeat return result end minLine function rounders sum,span put round(100*(sum/span))/100 into result return result end rounders on ScrolltoLastLine global operationMode,dateforUpdate,lineCount if operationMode="Update" then if dateforUpdate≠item 1 of line lineCount of field "data" then get line lineCount of field "data" put it&return&dateforUpdate into line lineCount of field "data" add 1 to lineCount get line lineCount of field "data" put it&"," into line lineCount of field "data" put lineCount-4 into scrolledLines if scrolledLines>0 then multiply scrolledLines by the textheight of field "Data" set the scroll of field "Data" to scrolledLines end if end if end if end ScrolltoLastLine on arrowDirection arrowNr put "bkgnd button ""e&"Direction "&arrowNr"e into direction get line arrowNr of field "Directions" if it>0 then set the icon of direction to it show direction else hide direction end if end arrowDirection on MovingAverage Avg,avgNr,span,itemNr global lineCount global upArrow,downArrow put 0 into avga put 0 into avgb put lineCount into itemCount put "Average "&avgNr into avgField if lineCount>=span then put rounders(Avg,span) into field avgField else put empty into field avgField end if if lineCount>=span+2 then if itemNr>0 then put item itemNr of line itemCount of field "data" into endValue1 subtract 1 from itemCount put item itemNr of line itemCount of field "data" into endValue2 subtract span-1 from itemCount put item itemNr of line itemCount of field "data" into pastValue1 subtract 1 from itemCount put item itemNr of line itemCount of field "data" into pastValue2 else put -itemNr into lowItem put lowItem-1 into highItem put item highItem of line itemCount of field "data" into endValue1 subtract item lowItem of line itemCount of field "data" from endValue1 subtract 1 from itemCount put item highItem of line itemCount of field "data" into endValue2 subtract item lowItem of line itemCount of field "data" from endValue2 subtract span-1 from itemCount put item highItem of line itemCount of field "data" into pastValue1 subtract item lowItem of line itemCount of field "data" from pastValue1 subtract 1 from itemCount put item highItem of line itemCount of field "data" into pastValue2 subtract item lowItem of line itemCount of field "data" from pastValue2 end if put Avg into Avga subtract endValue1 from Avga add pastValue1 to Avga put Avga into Avgb subtract endValue2 from Avgb add pastValue2 to Avgb put 0 into iconNr if Avg > Avga then if Avga>Avgb then put upArrow into iconNr end if else if Avg < Avga then if Avga < Avgb then put downArrow into iconNr end if end if end if else put 0 into iconNr end if put iconNr into line avgNr of field "Directions" arrowDirection avgNr end MovingAverage on ClearFields put empty into field "Date of Last Update" put empty into field "high" put empty into field "low" put empty into field "close" put empty into field "Average 1" put empty into field "Average 2" put empty into field "Average 3" put the number of lines of field "data" into lineCount repeat with i=1 to 3 put 0 into line i of field "Directions" arrowDirection i end repeat end ClearFields on TrimDataPoints -- Reduce data points to maxDataPoints global maxDataPoints,lineCount repeat while last line of field "data" is empty delete last line of field "data" end repeat repeat while number of lines of field "data" > maxDataPoints delete line 1 of field "data" end repeat put the number of lines of field "data" into lineCount end TrimDataPoints on SetforUpdate global operationMode,dateforUpdate,lineCount if operationMode="Update" then if dateforUpdate≠item 1 of line lineCount of field "data" then get line lineCount of field "data" put it&return&dateforUpdate into line lineCount of field "data" add 1 to lineCount get line lineCount of field "data" put it&"," into line lineCount of field "data" put lineCount-4 into scrolledLines if scrolledLines>0 then multiply scrolledLines by the textheight of field "Data" set the scroll of field "Data" to scrolledLines end if end if else put number of lines of field "data" into lineCount if lineCount>1 then scrolltoLastLine end if end if end SetforUpdate on QuickUpdate global dateforUpdate,lineCount,cardNr,updateFlag -- Assumes at card cardNr put "skip" into updateFlag put field "Stock Symbol" into StockSymbol put field "Stock Name" into StockName put the number of lines of field "data" into lineCount get line lineCount of field "data" if dateforUpdate≠item 1 of it then go card "Update All" set lockScreen to false put StockSymbol into field "Symbol" put StockName into field "Name" put item 1 of it into field "Last Week" delete item 1 of it put it into field "Last Week's Prices" put dateforUpdate into field "This Week" put empty into field "This Week's Prices" set lockScreen to true else add 1 to cardNr end if end QuickUpdate